package com.you.mybatis.base.mapper;

import com.you.mybatis.base.model.UserInfo;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface UserInfoMapper {

    List<UserInfo> findByNameAndPassword(@Param("username") String username,
        @Param("password") String password);

    UserInfo get(@Param("id") Integer id);

    List<UserInfo> findByIds(List<Integer> ids);

    UserInfo getByUseGlobalCache(@Param("id") Integer id);

    List<UserInfo> queryName(@Param("username") String username);

    /**
     * 插入数据(insert所有字段)
     *
     * @param userInfo 参数
     * @return 影响行数
     */
    int insert(UserInfo userInfo);

    /**
     * 插入数据（insert非空字段）
     * 与insert的主要区别就是insert空字段会覆盖数据默认值，insertSelective
     * 空字段做了判断，不会覆盖其默认值
     *
     * @param userInfo 参数
     * @return 影响行数
     */
    int insertSelective(UserInfo userInfo);

    /**
     * 插入数据
     * 通过selectKey前置条件自定义生成主键的值
     *
     * @param userInfo 参数
     * @return 影响行数
     */
    int insertGenerateId(UserInfo userInfo);

    /**
     * 更新数据
     * 通过selectKey前置条件自定义生成主键的值
     *
     * @param userInfo 参数
     * @return 影响行数
     */
    int update(UserInfo userInfo);

    /**
     * 更新数据（只更新非空字段）
     * 通过selectKey前置条件自定义生成主键的值
     *
     * @param userInfo 参数
     * @return 影响行数
     */
    int updateSelective(UserInfo userInfo);
}
